<?php

if(!function_exists('notice'))
{
    /**
     * 提示信息
    */
    function notice($msg,$url = null)
    {
        if($url)
        {
            echo "
                <script>
                    alert('$msg');
                    location.href = '$url';
                </script>
            ";
        }else{
            echo "
                <script>
                    alert('$msg');
                    history.go(-1);
                </script>
            ";
        }
        exit;
    }
}

if(!function_exists('build_randstr'))
{
    /**
     * 获得随机字符串
     * @param $len             需要的长度
     * @param $special        是否需要特殊符号
     * @return string       返回随机字符串
     */
    function build_randstr($len = 10, $special = false)
    {
        // 定义字符
        $chars = array(
            "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
            "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
            "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
            "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
            "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
            "3", "4", "5", "6", "7", "8", "9"
        );

        // 特殊字符
        if ($special) {
            // 合并数组
            $chars = array_merge($chars, array(
                "!", "@", "#", "$", "?", "|", "{", "/", ":", ";",
                "%", "^", "&", "*", "(", ")", "-", "_", "[", "]",
                "}", "<", ">", "~", "+", "=", ",", "."
            ));
        }

        // 获取字符的长度
        $charsLen = count($chars) - 1;

        // 打乱数组顺序
        shuffle($chars);

        // 存放拼接的字符串
        $str = '';

        for ($i = 0; $i < $len; $i++) {
            // 随机取出一位
            $str .= $chars[mt_rand(0, $charsLen)];
        }
        
        // 拼接好的字符串
        return $str;
    }
}

if(!function_exists('build_upload'))
{
    /**
     * 单图上传
     * @param string $name 图片名
     * @param array $type 图片类型
     * @param string $path 保存路径
     * @param int|string $size 图片大小
    */
    function build_upload($name,$type = ['jpg', 'jpeg', 'png', 'gif'],$path = 'uploads',$size = 1048576)
    {
        // 定义返回结果的数组
        $result = [
            'code' => 0,// 1 操作成功 0 操作失败
            'msg' => '未知信息',// 提示信息
            'data' => null,// 把要返回数据放到这里
        ];

        // 获取当前的年月日
        $date = date('Ymd');

        // 拼接保存的路径
        $Path = ROOT_PATH . '/' . $path . '/' . $date;

        if(!is_dir($Path))
        {
            mkdir($Path,0755,true);
        }

        // 根据传入图片名获取文件数据
        $file = $_FILES[$name] ?? '';

        // 判断文件是否为空
        if(!$file)
        {
            // 把当前错误信息返回
            $result['msg'] = '接收的图片名不存在';

            // 返回结果并且不执行后面代码
            return $result;
        }

        // 获取文件错误码
        $ErrorCode = $file['error'] ?? 4;

        // 根据错误码返回相应提示信息
        switch($ErrorCode)
        {
            case 1:
                $result['msg'] = '图片上传文件大小不能超过upload_max_filesize设置的值';
                return $result;

            case 2:
                $result['msg'] = '图片文件大小不能超过MAX_FILE_SIZE设置的值';
                return $result;

            case 3:
                $result['msg'] = '图片上传不完整';
                return $result;

            case 4:
                $result['msg'] = '没有上传图片';
                return $result;

            default:
        }

        // 获取图片类型（文件后缀）
        $ext = pathinfo($file['name'],PATHINFO_EXTENSION);

        // 判断当前上传图片类型是否不存在于指定类型数组
        if(!in_array($ext,$type))
        {
            $result['msg'] = '图片类型错误';
            return $result;
        }

        // 限制图片大小
        $filesize = $file['size'];

        if($filesize > $size)
        {
            $result['msg'] = '图片大小超出指定图片大小，请压缩上传';
            return $result;
        }

        // 生成新的名称
        $filename = date('YmdHis') . mt_rand(1000,9999) . mt_rand(1000,9999) . '.' . $ext;

        // 当前图片通过http post上传
        if(is_uploaded_file($file['tmp_name']) === true)
        {
            if(move_uploaded_file($file['tmp_name'],$Path . '/' . $filename))
            {
                $result = [
                    'code' => 1,
                    'msg' => '图片上传成功',
                    'data' => '/' . $path . '/' . $date . '/' . $filename
                ];
            }else{
                $result['msg'] = '图片上传失败';
            }
        }else{
            $result['msg'] = '图片上传错误';
        }

        return $result;
    }
}

if(!function_exists('add'))
{
    /**
     * 添加数据
     * @param string $table 表名
     * @param array $data 添加数据
     * @return array
    */
    function add($table,$data)
    {
        // 调用全局变量
        global $prefix,$conn;

        // 表前缀 + 表名
        $table = $prefix . $table;

        // 获取字段名
        $FieldArr = array_keys($data);

        $fields = "`" . implode("`,`",$FieldArr) . "`";

        // 获取字段值
        $values = "'" . implode("','",$data) . "'";

        // INSERT INTO `table`(`field`)VALUES('value');
        $sql = "INSERT INTO `$table`($fields)VALUES($values)";

        $result = mysqli_query($conn,$sql);

        if($result)
        {
            return [
                'code' => 1,
                'msg' => '插入数据成功',
                'data' => mysqli_insert_id($conn)// 数据表最后一次插入数据的自增id
            ];
        }else{
            return [
                'code' => 0,
                'msg' => mysqli_error($conn),// 返回错误信息
                'data' => null
            ];
        }
    }
}

if(!function_exists('find'))
{
    /**
     * 查询单条数据
     * @param string $sql 查询语句
    */
    function find($sql)
    {
        global $conn;

        $data = [];

        $result = mysqli_query($conn,$sql);

        if($result && mysqli_num_rows($result) > 0)
        {
            $data = mysqli_fetch_assoc($result);
        }

        return $data;
    }
}

if(!function_exists('all'))
{
    /**
     * 查询多条数据
    */
    function all($sql)
    {
        global $conn;

        $result = mysqli_query($conn,$sql);

        $data = [];

        if($result && mysqli_num_rows($result) > 0)
        {
            $data = mysqli_fetch_all($result,MYSQLI_ASSOC);
        }

        return $data;
    }
}

if(!function_exists('GetUrl'))
{
    /**
     * 获取不带page参数的url
    */
    function GetUrl()
    {
        // www.company.com?page=2&search=demo
        $url = $_SERVER['PHP_SELF'] . '?';

        if($_GET)
        {
            foreach($_GET as $key => $val)
            {
                if($key != 'page')
                {
                    $url .= $key.'='.$val.'&';
                }
            }
        }

        return $url;
    }
}

if(!function_exists('ShowPage'))
{
    /**
     * 输出分页
     * @param int|string $current 当前页
     * @param int|string $count 数据总数
     * @param int|string $limit 每页多少条数据
     * @param int $size 显示多少个页码
     * @param string $class 样式
    */
    function ShowPage($current,$count,$limit = 10,$size = 5,$class = 'digg')
    {
        $html = '';

        // 如果数据总数大于每页显示的数据才会出现分页
        if($count > $limit)
        {
            // 计算出共多少页
            $PageCount = ceil($count / $limit);

            // 获取重组的url
            $url = GetUrl();

            // 开始拼接分页结构
            $html = '<div class="' . $class . '">';

            // 首页 上一页
            if($current == 1)
            {
                $html .= '<span class="disabled">首&nbsp;页</span>';
                $html .= '<span class="disabled">上一页</span>';
            }else{
                $html .= '<a href="' . $url . 'page=' . 1 . '">首&nbsp;页</a>';
                $html .= '<a href="' . $url . 'page=' . ($current - 1) . '">上一页</a>';
            }

            // 循环页码
            /* 
                [1] 2 3 4 5
                1 [2] 3 4 5
                1 2 [3] 4 5
                2 3 [4] 5 6
                ...
                6 [7] 8 9 10
                6 7 [8] 9 10
                6 7 8 [9] 10
            */

            // 中间部分显示页码，  取的页码范围
            if($current <= floor($size / 2))
            {
                // 当前页在中间位置靠左,floor()向下取整
                $start  =  1;
                // 如果总页数大于中间显示多少页,结束数字就是中间显示多少页的数字,否则结束数字就是总页数
                $end = $PageCount < $size ? $PageCount : $size;
            }else if($current >= $PageCount - floor($size / 2))
            {
                // 当前页在中间位置靠右 避免页数出现0或者负数
                $start = $PageCount - $size + 1 <= 0 ? 1 : $PageCount - $size + 1;
                $end = $PageCount;
            }else{
                // 当前页刚好在中间位置
                $start = $current - floor($size / 2);
                $end = $current + floor($size / 2);
            }

            for($i = $start; $i <= $end; $i++)
            {
                if($i == $current)
                {
                    $html .= '<span class="current">' . $i . '</span>';
                }else{
                    $html .= '<a href="' . $url . 'page=' . $i . '">' . $i . '</a>';
                }
            }

            // 下一页 尾页
            if($current == $PageCount)
            {
                $html .= '<span class="disabled">下一页</span>';
                $html .= '<span class="disabled">尾&nbsp;页</span>';
            }else{
                $html .= '<a href="' . $url . 'page=' . ($current + 1) . '">下一页</a>';
                $html .= '<a href="' . $url . 'page=' . $PageCount . '">尾&nbsp;页</a>';
            }


            $html .= '</div>';
        }

        return $html;
    }
}

if(!function_exists('del'))
{
    /**
     * 删除数据
     * @param string $table 表名
     * @param string $where 删除条件
    */
    function del($table,$where = 1)
    {
        global $conn,$prefix;

        $table = $prefix . $table;

        $sql = "DELETE FROM `$table` WHERE $where";

        $result = mysqli_query($conn,$sql);

        if($result)
        {
            return [
                'code' => 1,
                'msg' => '删除数据成功',
                'data' => null
            ];
        }else{
            return [
                'code' => 0,
                'msg' => mysqli_error($conn),// 返回错误信息
                'data' => null
            ];
        }
    }
}

if(!function_exists('update'))
{
    /**
     * 更新数据
     * @param string $table 表名
     * @param array $data 更新的数据
     * @param string $where 更新条件
    */
    function update($table,$data,$where)
    {
        global $conn,$prefix;

        $table = $prefix . $table;

        $fields = '';

        foreach($data as $key => $val)
        {
            $fields .= "`" . $key . "` = '" . $val . "',";
        }

        $fields = rtrim($fields,',');
        // UPDATE `table` SET `field` = `value`,`field` = 'value' WHERE where;
    
        $sql = "UPDATE `$table` SET $fields WHERE $where";

        $result = mysqli_query($conn,$sql);

        if($result)
        {
            return [
                'code' => 1,
                'msg' => '更新数据成功',
                'data' => null
            ];
        }else{
            return [
                'code' => 0,
                'msg' => mysqli_error($conn),// 返回错误信息
                'data' => null
            ];
        }
    
    }
}